﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using ControleRepresentante.Logic.Models;
using WebSite.ViewModels.EditViewModels.EditGridViewModels;
using WebSite.ViewModels.Fields;

namespace WebSite.ViewModels.EditViewModels
{
    public class PedidoEditViewModel : AttributeHolderEditViewModel
    {
        private readonly Dictionary<Guid, String> m_Clientes;
        private readonly Dictionary<Guid, String> m_Vendedores;
        private readonly Dictionary<Guid, String> m_Transportadoras;
        private readonly Dictionary<Guid, String> m_Fabricas;

        public PedidoEditViewModel(Dictionary<Guid, String> clientes, Dictionary<Guid, String> vendedores, Dictionary<Guid, String> transportadoras, Dictionary<Guid, String> fabricas)
            : base("Pedido")
        {
            m_Clientes = clientes;
            m_Vendedores = vendedores;
            m_Transportadoras = transportadoras;
            m_Fabricas = fabricas;
        }

        public PedidoEditViewModel(string message)
            : base("Pedido", message)
        {
        }

        protected override IEnumerable<IField> GetGeralFields()
        {
            Pedido pedido = (Pedido) Model;

            List<IField> result = new List<IField>
            {
                new DatePickerField("Data", "data", pedido.Data),
                new TextBoxField("Condição de Pagamento", "condicaoPagamento", pedido.CondicaoPagamento, true),
                new TextBoxField("Prazo de entrega", "prazoEntrega", pedido.PrazoEntrega, true),
                new TextBoxField("Desconto", "desconto", String.Format("{0:0.0}", pedido.Desconto), true, "%"),
                CreateDropDownField("Cliente", "clienteId", m_Clientes, x => x.Cliente),
                CreateDropDownField("Vendedor", "vendedorId", m_Vendedores, x => x.Vendedor),
                CreateDropDownField("Fábrica", "fabricaId", m_Fabricas, x => x.Fabrica),
                CreateDropDownField("Transportadora", "transportadoraId", m_Transportadoras, x => x.Transportadora),
                new CheckBoxField("Faturado", "faturado", pedido.Faturado),
                new CheckBoxField("Cancelado", "cancelado", pedido.Cancelado),
                new TextAreaField("Observação", "observacao", pedido.Observacao, 8, 100),
            };
            if (pedido.Numero != 0)
            {
                result.Insert(0, new LabelField("Número", "numero", pedido.Numero));
            }
            result.AddRange(base.GetGeralFields());
            return result;
        }


        private DropDownListField CreateDropDownField(string caption, string name, Dictionary<Guid, String> dictionary, Func<Pedido, ModelBase> getModelIdFromPedido)
        {
            Pedido pedido = (Pedido)Model;

            DropDownListField clienteField = new DropDownListField(caption, name, true);
            foreach (KeyValuePair<Guid, string> model in dictionary)
            {
                ModelBase modelFromPedido = getModelIdFromPedido(pedido);
                clienteField.Add(model.Value, model.Key, modelFromPedido != null && (modelFromPedido.Id == model.Key));
            }
            return clienteField;
        }

        protected override IEnumerable<TabItem> GetTabs(HtmlHelper htmlHelper)
        {
            List<TabItem> result = base.GetTabs(htmlHelper).ToList();

            Pedido pedido = (Pedido)Model;

            result.Add(new TabItem("Produtos",
                "~/Content/produto.png",
                new ProdutoEditViewModel(htmlHelper, ControllerName, pedido, "ProdutoId")));

            return result;
        }
    }
}